\documentclass[supercite]{Experimental_Report}

\title{~~~~~~数字电路实验~~~~~~}
\author{崔昊阳}
\school{计算机科学与技术学院}
\classnum{CS2104}
\stunum{U202115415}
\instructor{胡迎松}
\date{2022年11月18日}

\usepackage{algorithm, multirow}
\usepackage{algpseudocode}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{framed}
\usepackage{mathtools}
\usepackage{subcaption}
\usepackage{xltxtra} %提供了针对XeTeX的改进并且加入了XeTeX的LOGO, 自动调用xunicode宏包(提供Unicode字符宏)
\usepackage{bm}
\usepackage{tikz}
\usepackage{tikzscale}
\usepackage{pgfplots}
%\usepackage{enumerate}

\pgfplotsset{compat=1.16}
\captionsetup{labelfont=it}

\newcommand{\cfig}[3]{
  \begin{figure}[htb]
    \centering
    \includegraphics[width=#2\textwidth]{images/#1.tikz}
    \caption{#3}
    \label{fig:#1}
  \end{figure}
}

\newcommand{\sfig}[3]{
  \begin{subfigure}[b]{#2\textwidth}
    \includegraphics[width=\textwidth]{images/#1.tikz}
    \caption{#3}
    \label{fig:#1}
  \end{subfigure}
}

\newcommand{\xfig}[3]{
  \begin{figure}[htb]
    \centering
    #3
    \caption{#2}
    \label{fig:#1}
  \end{figure}
}

\newcommand{\rfig}[1]{\autoref{fig:#1}}
\newcommand{\ralg}[1]{\autoref{alg:#1}}
\newcommand{\rthm}[1]{\autoref{thm:#1}}
\newcommand{\rlem}[1]{\autoref{lem:#1}}
\newcommand{\reqn}[1]{\autoref{eqn:#1}}
\newcommand{\rtbl}[1]{\autoref{tbl:#1}}

\algnewcommand\Null{\textsc{null }}
\algnewcommand\algorithmicinput{\textbf{Input:}}
\algnewcommand\Input{\item[\algorithmicinput]}
\algnewcommand\algorithmicoutput{\textbf{Output:}}
\algnewcommand\Output{\item[\algorithmicoutput]}
\algnewcommand\algorithmicbreak{\textbf{break}}
\algnewcommand\Break{\algorithmicbreak}
\algnewcommand\algorithmiccontinue{\textbf{continue}}
\algnewcommand\Continue{\algorithmiccontinue}
\algnewcommand{\LeftCom}[1]{\State $\triangleright$ #1}

\newtheorem{thm}{定理}[section]
\newtheorem{lem}{引理}[section]

\colorlet{shadecolor}{black!15}

\theoremstyle{definition}
\newtheorem{alg}{算法}[section]

\def\thmautorefname~#1\null{定理~#1~\null}
\def\lemautorefname~#1\null{引理~#1~\null}
\def\algautorefname~#1\null{算法~#1~\null}

\begin{document}

\maketitle

\clearpage

\pagenumbering{Roman}

\tableofcontents[level=2]

\clearpage

\pagenumbering{arabic}

\section{实验概述}

\subsection{实验名称}

运动码表系统设计。

\subsection{实验目的}

实验将提供一个完整的数字逻辑实验包，从真值表方式构建7段数码管驱动电路，到逻辑表达式方式构建四位比较器，多路选择器，利用同步时序逻辑构建BCD计数器，从简单的组合逻辑电路到复杂时序逻辑电路，最终集成实现为运动码表系统。

实验由简到难，层次递进，从器件到部件，从部件到系统，通过本实验的设计、仿真、验证3个训练过程使同学们掌握小型数字电路系统的设计、仿真、调试方法以及电路模块封装的方法。

\subsection{实验环境}

软件：Logisim2.15.0.2软件一套。

平台：https://www.educoder.net

\subsection{实验内容}

设计一个运动码表系统，具体内容及要求如下： 

\quad 输入：4个按钮，分别为Start、Stop、Store和Reset。 

\quad 输出：4个7段数码管显示数字，分别显示秒和百分秒。 

具体功能： 
\begin{enumerate}
	\setlength{\itemindent}{2em}
	\item 当按下Start时，计时器清零，重新开始计时； 
	\item 当按下Stop时，计时器停止计时，显示计时数据； 
	\item 当按下Store时，若当前计时数据小于系统记录，则更新系统记录，并显示当前计时数据；否则不更新系统记录，但显示系统记录。
	\item 当按下Reset时，复位，计时=0.00, 系统记录=99.99秒。
\end{enumerate}


\subsection{实验要求}
\begin{enumerate}
	\item 根据给定的实验包，将运动码表系统切分为一个个实验单元；
	\item 对每一个实验单元，按要求设计电路并使用Logisim软件进行虚拟仿真；
	\item 设计好的电路在educoder平台上提交并进行评测，直到通过全部关卡。
\end{enumerate}

\newpage

\section{设计方案与实验过程}


\subsection{方案设计}
运动码表包括16位并行加载寄存器、码表计数器、码表控制器、码表显示驱动等模块。
其中，16位并行加载寄存器负责存储系统记录的时间；码表计数器用于计时；
码表控制器负责功能间的切换；码表显示驱动负责显示时间。这些模块又各自包含若干子模块，
各模块的\textbf{设计参数、引脚图、真值表}如下：
\subsubsection{数码管驱动}
数码管驱动可根据输入信号控制一位数字显示器的输出，是构成码表显示驱动的元件，本质上是一个七段数显译码器。

数码管驱动的输入是4位8421BCD码，表示1位十进制数；输出是7位数字显示器的控制信号，该控制信号可以控制显示器显示输入所对应的数字。
其引脚图和真值表如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item $X_i$:输入的8421BCD码
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item $Seg_i$:数显控制信号
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/数码管驱动引脚图.png}
		\caption{数码管驱动引脚图}
		\label{}
	\end{center}
\end{figure}

\begin{table}[H]
  \centering
  \caption{数码管驱动的真值表}
    \begin{tabular}{rrrrrrrrrrrr}
    \toprule
    \multicolumn{1}{l}{X3} & \multicolumn{1}{l}{X2} & \multicolumn{1}{l}{X1} & \multicolumn{1}{l}{X0} &       & \multicolumn{1}{l}{Seg1} & \multicolumn{1}{l}{Seg2} & \multicolumn{1}{l}{Seg3} & \multicolumn{1}{l}{Seg4} & \multicolumn{1}{l}{Seg5} & \multicolumn{1}{l}{Seg6} & \multicolumn{1}{l}{Seg7} \\
    \hline
    0     & 0     & 0     & 0     &       & 0     & 1     & 1     & 1     & 1     & 1     & 1 \\
    0     & 0     & 0     & 1     &       & 0     & 0     & 0     & 1     & 0     & 0     & 1 \\
    0     & 0     & 1     & 0     &       & 1     & 0     & 1     & 1     & 1     & 1     & 0 \\
    0     & 0     & 1     & 1     &       & 1     & 0     & 1     & 1     & 0     & 1     & 1 \\
    0     & 1     & 0     & 0     &       & 1     & 1     & 0     & 1     & 0     & 0     & 1 \\
    0     & 1     & 0     & 1     &       & 1     & 1     & 1     & 0     & 0     & 1     & 1 \\
    0     & 1     & 1     & 0     &       & 1     & 1     & 1     & 0     & 1     & 1     & 1 \\
    0     & 1     & 1     & 1     &       & 0     & 0     & 1     & 1     & 0     & 0     & 1 \\
    1     & 0     & 0     & 0     &       & 1     & 1     & 1     & 1     & 1     & 1     & 1 \\
    1     & 0     & 0     & 1     &       & 1     & 1     & 1     & 1     & 0     & 1     & 1 \\
    \bottomrule
  \end{tabular}
  \label{}
\end{table}

\subsubsection{1位二路选择器}
1位二路选择器根据Sel的取值输出X0或X1，是构成16位二路选择器的元件，本质上是1个组合逻辑电路。

1位二路选择器的输入是待选的X0和X1，以及选择信号Sel；输出是X0或X1的值，当Sel为0时输出X0，否则输出X1。
其引脚图和真值表如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item $X_i$:输入信号
  \item Sel:选择信号
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Out:输出
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/1位二路选择器的引脚图.png}
		\caption{1位二路选择器引脚图}
		\label{}
	\end{center}
\end{figure}

\begin{table}[H]
  \centering
  \caption{1位二路选择器的真值表}
    \begin{tabular}{rrrrr}
      \toprule
    \multicolumn{1}{l}{X0} & \multicolumn{1}{l}{Sel} & \multicolumn{1}{l}{X1} &       & \multicolumn{1}{l}{Out} \\
    \hline
    0     & 0     & 0     &       & 0 \\
    0     & 0     & 1     &       & 0 \\
    0     & 1     & 0     &       & 0 \\
    0     & 1     & 1     &       & 1 \\
    1     & 0     & 0     &       & 1 \\
    1     & 0     & 1     &       & 1 \\
    1     & 1     & 0     &       & 0 \\
    1     & 1     & 1     &       & 1 \\
    \bottomrule
    \end{tabular}
  \label{}
\end{table}

\subsubsection{16位二路选择器}
16位二路选择器的功能依然是根据Sel的取值输出X0或X1，但这里的X0和X1都是16位二进制数。16位二路选择器由16个1位二路选择器构成，本质上是1个组合逻辑电路。

16位二路选择器的输入是待选的16位二进制数X0和X1，以及选择信号Sel；输出是X0或X1的值，当Sel为0时输出X0，否则输出X1。
其引脚图如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item $X_i$:输入信号
  \item Sel:选择信号
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Out:输出
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.40]{images/16位二路选择器的引脚图.png}
		\caption{16位二路选择器引脚图}
		\label{}
	\end{center}
\end{figure}

\subsubsection{2位无符号比较器}
2位无符号比较器用于比较2个2位二进制数，是构成4位无符号比较器的元件，本质上是1个组合逻辑电路。

2位无符号比较器的输入是2个二进制数 $X2X1$ 和 $Y2Y1$，输出是Greater,Equal和Less。
当$X2X1>Y2Y1$时，Greater输出1，其他输入端为0;当$X2X1=Y2Y1$时，Equal输出1，其他输入端为0;当$X2X1<Y2Y1$时，Less输出1，其他输入端为0;
其引脚图和真值表如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item $X_i$:X二进制数
  \item $Y_i$:Y二进制数
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Greater:$X>Y$
  \item Equal:$X=Y$
  \item Less:$X<Y$
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/2位无符号比较器的引脚图.png}
		\caption{2位无符号比较器引脚图}
		\label{}
	\end{center}
\end{figure}

\begin{table}[H]
  \centering
  \caption{2位无符号比较器的真值表}
    \begin{tabular}{rrrrrrrr}
      \toprule
    \multicolumn{1}{l}{X2} & \multicolumn{1}{l}{X1} & \multicolumn{1}{l}{Y2} & \multicolumn{1}{l}{Y1} &       & \multicolumn{1}{l}{Greater} & \multicolumn{1}{l}{Equal} & \multicolumn{1}{l}{Less} \\
    \hline
    0     & 0     & 0     & 0     &       & 0     & 1     & 0 \\
    0     & 0     & 0     & 1     &       & 0     & 0     & 1 \\
    0     & 0     & 1     & 0     &       & 0     & 0     & 1 \\
    0     & 0     & 1     & 1     &       & 0     & 0     & 1 \\
    0     & 1     & 0     & 0     &       & 1     & 0     & 0 \\
    0     & 1     & 0     & 1     &       & 0     & 1     & 0 \\
    0     & 1     & 1     & 0     &       & 0     & 0     & 1 \\
    0     & 1     & 1     & 1     &       & 0     & 0     & 1 \\
    1     & 0     & 0     & 0     &       & 1     & 0     & 0 \\
    1     & 0     & 0     & 1     &       & 1     & 0     & 0 \\
    1     & 0     & 1     & 0     &       & 0     & 1     & 0 \\
    1     & 0     & 1     & 1     &       & 0     & 0     & 1 \\
    1     & 1     & 0     & 0     &       & 1     & 0     & 0 \\
    1     & 1     & 0     & 1     &       & 1     & 0     & 0 \\
    1     & 1     & 1     & 0     &       & 1     & 0     & 0 \\
    1     & 1     & 1     & 1     &       & 0     & 1     & 0 \\
    \bottomrule
    \end{tabular}
  \label{}
\end{table}

\subsubsection{4位无符号比较器}
4位无符号比较器用于比较2个4位二进制数，由2位无符号比较器构成，是构成16位无符号比较器的元件，本质上是1个组合逻辑电路。

2位无符号比较器的输入是2个二进制数 $X3X2X1X0$ 和 $Y3Y2Y1Y0$，输出是 Greater,Equal 和 Less。
当 $X3X2X1X0>Y3Y2Y1Y0$ 时，Greater 输出 1，其他输入端为 0;当 $X3X2X1X0=Y3Y2Y1Y0$ 时，Equal 输出 1，其他输入端为 0;当 $X3X2X1X0<Y3Y2Y1Y0$ 时，Less 输出 1，其他输入端为 0;
其引脚图和真值表如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item $X_i$:X二进制数
  \item $Y_i$:Y二进制数
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Greater:$X>Y$
  \item Equal:$X=Y$
  \item Less:$X<Y$
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/4位无符号比较器的引脚图.png}
		\caption{4位无符号比较器引脚图}
		\label{}
	\end{center}
\end{figure}

\begin{table}[H]
  \centering
  \caption{4位无符号比较器的真值表}
    \begin{tabular}{ccccrrrr}
      \toprule
    \multicolumn{5}{c}{输入}                & \multicolumn{1}{l}{Greater} & \multicolumn{1}{l}{Equal} & \multicolumn{1}{l}{Less} \\
    \hline
    \multicolumn{4}{c}{X3X2X1X0>Y3Y2Y1Y0} &       & 1     & 0     & 0 \\
    \multicolumn{4}{c}{X3X2X1X0=Y3Y2Y1Y1} &       & 0     & 1     & 0 \\
    \multicolumn{4}{c}{X3X2X1X0<Y3Y2Y1Y2} &       & 0     & 0     & 1 \\
    \bottomrule
    \end{tabular}
  \label{}
\end{table}

\subsubsection{16位无符号比较器}
16位无符号比较器用于比较2个16位二进制数，由4位无符号比较器构成，本质上是1个组合逻辑电路。

2位无符号比较器的输入是2个16位二进制数 $X$ 和 $Y$，输出是 Greater,Equal 和 Less。
当 $X>Y$ 时，Greater 输出 1，其他输入端为 0;当 $X=Y$ 时，Equal 输出 1，其他输入端为 0;当 $Y$ 时，Less 输出 1，其他输入端为 0;
其引脚图和真值表如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item $X_i$:X二进制数
  \item $Y_i$:Y二进制数
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Greater:$X>Y$
  \item Equal:$X=Y$
  \item Less:$X<Y$
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/16位无符号比较器的引脚图.png}
		\caption{16位无符号比较器引脚图}
		\label{}
	\end{center}
\end{figure}

\begin{table}[H]
  \centering
  \caption{16位无符号比较器的真值表}
    \begin{tabular}{ccccrrrr}
      \toprule
    \multicolumn{5}{c}{输入}                & \multicolumn{1}{l}{Greater} & \multicolumn{1}{l}{Equal} & \multicolumn{1}{l}{Less} \\
    \hline
    \multicolumn{4}{c}{X>Y}       &       & 1     & 0     & 0 \\
    \multicolumn{4}{c}{X=Y}       &       & 0     & 1     & 0 \\
    \multicolumn{4}{c}{X<Y}       &       & 0     & 0     & 1 \\
    \bottomrule
    \end{tabular}
  \label{}
\end{table}

\subsubsection{4位并行加载寄存器}
4位并行加载寄存器的作用是把输入的4位二进制数存入D触发器中并输出，是构成16位并行加载寄存器的元件，本质上是1个Moore型同步时序逻辑电路。

4位并行加载寄存器的输入是CP,En和4位二进制数，CP是时间脉冲，En是使能信号；输出是和输入相同的4位二进制数。其引脚图和状态表如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Din:4位输入
  \item En:高电位有效使能信号
  \item CLK:时钟信号
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Dout:4位输出
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/4位并行加载寄存器的引脚图.png}
		\caption{4位并行加载寄存器引脚图}
		\label{}
	\end{center}
\end{figure}

\begin{table}[H]
  \centering
  \caption{4位并行加载寄存器的状态表}
    \begin{tabular}{rrrrrrrrrrrrrr}
      \toprule
    \multicolumn{4}{c}{现态}        &       & \multicolumn{4}{c}{次态}        &       & \multicolumn{4}{c}{输出} \\
    \hline
    0     & 0     & 0     & 0     &       & 0     & 0     & 0     & 0     &       & 0     & 0     & 0     & 0 \\
    0     & 0     & 0     & 1     &       & 0     & 0     & 0     & 1     &       & 0     & 0     & 0     & 1 \\
    0     & 0     & 1     & 0     &       & 0     & 0     & 1     & 0     &       & 0     & 0     & 1     & 0 \\
    0     & 0     & 1     & 1     &       & 0     & 0     & 1     & 1     &       & 0     & 0     & 1     & 1 \\
    0     & 1     & 0     & 0     &       & 0     & 1     & 0     & 0     &       & 0     & 1     & 0     & 0 \\
    0     & 1     & 0     & 1     &       & 0     & 1     & 0     & 1     &       & 0     & 1     & 0     & 1 \\
    0     & 1     & 1     & 0     &       & 0     & 1     & 1     & 0     &       & 0     & 1     & 1     & 0 \\
    0     & 1     & 1     & 1     &       & 0     & 1     & 1     & 1     &       & 0     & 1     & 1     & 1 \\
    1     & 0     & 0     & 0     &       & 1     & 0     & 0     & 0     &       & 1     & 0     & 0     & 0 \\
    1     & 0     & 0     & 1     &       & 1     & 0     & 0     & 1     &       & 1     & 0     & 0     & 1 \\
    1     & 0     & 1     & 0     &       & 1     & 0     & 1     & 0     &       & 1     & 0     & 1     & 0 \\
    1     & 0     & 1     & 1     &       & 1     & 0     & 1     & 1     &       & 1     & 0     & 1     & 1 \\
    1     & 1     & 0     & 0     &       & 1     & 1     & 0     & 0     &       & 1     & 1     & 0     & 0 \\
    1     & 1     & 0     & 1     &       & 1     & 1     & 0     & 1     &       & 1     & 1     & 0     & 1 \\
    1     & 1     & 1     & 0     &       & 1     & 1     & 1     & 0     &       & 1     & 1     & 1     & 0 \\
    1     & 1     & 1     & 1     &       & 1     & 1     & 1     & 1     &       & 1     & 1     & 1     & 1 \\
    \bottomrule
    \end{tabular}
  \label{}
\end{table}


\subsubsection{16位并行加载寄存器}
16位并行加载寄存器的作用是把输入的16位二进制数存入D触发器中并输出，由4个4位并行加载寄存器构成，本质上是1个Moore型同步时序逻辑电路。

16位并行加载寄存器的输入是CP,En和4位二进制数，CP是时间脉冲，En是使能信号；输出是和输入相同的16位二进制数。
其引脚图如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Din:4位输入
  \item En:高电位有效使能信号
  \item CLK:时钟信号
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Dout:4位输出
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/16位并行加载寄存器的引脚图.png}
		\caption{16位并行加载寄存器引脚图}
		\label{}
	\end{center}
\end{figure}

\subsubsection{4位BCD计数器}
4位BCD计数器实现模10加1计数器功能，并输出进位信号和次态，是构成码表计数器的元件，本质上是1个Moore型同步时序逻辑电路。

4位BCD计数器的输入是CP,En,Rst和4位8421BCD码，CP是时间脉冲，En是使能信号，Rst是异步复位信号；
4位BCD计数器的输出有两个：其一是输入的下一个状态，其二是进位信号。
其引脚图和状态表如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Rst:异步复位信号
  \item En:高电位有效使能信号
  \item CLK:时钟信号
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Dout:4位输出
  \item 进位输出:进位输出
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/4位BCD计数器的引脚图.png}
		\caption{4位BCD计数器引脚图}
		\label{}
	\end{center}
\end{figure}

\begin{table}[H]
  \centering
  \caption{4位BCD计数器的状态表}
    \begin{tabular}{rrrrrrrrrrrrrrrr}
      \toprule
    \multicolumn{4}{c}{现态}        &       & \multicolumn{4}{c}{次态}        &       & \multicolumn{4}{c}{输出}        &       & \multicolumn{1}{l}{进位输出} \\
    \hline
    0     & 0     & 0     & 0     &       & 0     & 0     & 0     & 1     &       & 0     & 0     & 0     & 1     &       & 0 \\
    0     & 0     & 0     & 1     &       & 0     & 0     & 1     & 0     &       & 0     & 0     & 1     & 0     &       & 0 \\
    0     & 0     & 1     & 0     &       & 0     & 0     & 1     & 1     &       & 0     & 0     & 1     & 1     &       & 0 \\
    0     & 0     & 1     & 1     &       & 0     & 1     & 0     & 0     &       & 0     & 1     & 0     & 0     &       & 0 \\
    0     & 1     & 0     & 0     &       & 0     & 1     & 0     & 1     &       & 0     & 1     & 0     & 1     &       & 0 \\
    0     & 1     & 0     & 1     &       & 0     & 1     & 1     & 0     &       & 0     & 1     & 1     & 0     &       & 0 \\
    0     & 1     & 1     & 0     &       & 0     & 1     & 1     & 1     &       & 0     & 1     & 1     & 1     &       & 0 \\
    0     & 1     & 1     & 1     &       & 1     & 0     & 0     & 0     &       & 1     & 0     & 0     & 0     &       & 0 \\
    1     & 0     & 0     & 0     &       & 1     & 0     & 0     & 1     &       & 1     & 0     & 0     & 1     &       & 0 \\
    1     & 0     & 0     & 1     &       & 0     & 0     & 0     & 0     &       & 0     & 0     & 0     & 0     &       & 1 \\
    \bottomrule
    \end{tabular}
  \label{}
\end{table}


\subsubsection{码表计数器}
码表计数器实现运动码表系统的计时功能，由4个4位BCD计数器构成，本质上是一个Moore型异步时序逻辑电路。

码表计数器的输入是CP,En和Rst，CP是时间脉冲，En是使能信号，Rst是异步复位信号；
输出是当前时间（4位十进制数）的BCD码，是一个16位二进制数。
其引脚图如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Rst:异步复位信号
  \item En:高电位有效使能信号
  \item CLK:时钟信号
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Dout:4位输出
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/码表计数器引脚图.png}
		\caption{码表计数器引脚图}
		\label{}
	\end{center}
\end{figure}


\subsubsection{码表显示驱动}
码表显示驱动实现将16位8421BCD码翻译成相应的数码管显示控制指令的功能，由4个数码管驱动构成，本质上是一个数显译码器。

码表显示驱动的输入是16位8421BCD码（代表当前时间的4位十进制数），输出是32位的数码管显示控制指令。其引脚图如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Din:16位8421BCD码
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item Dout:数码管显示控制信号
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/码表显示驱动引脚图.png}
		\caption{码表显示驱动引脚图}
		\label{}
	\end{center}
\end{figure}

\subsubsection{码表控制器}
码表控制器实现将按键信号翻译成控制码表状态转换的信号，本质上是一个Moore型同步时序逻辑电路。

码表控制器的输入是Start,Stop,Store,Reset,Newrecord按键信号和现态，输出的是控制码表状态转换的信号。
其引脚图、状态图和状态表如下：

引脚名称解释：

输入：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item start:开始计时信号
  \item stop:停止计时信号
  \item store:存储计时记录信号
  \item reset:计时复位信号
  \item newrecord:新记录信号
  \item CLK:时钟信号
\end{enumerate}
\quad 输出：
\begin{enumerate}
  \setlength{\itemindent}{2em}
  \item SDsel:最好成绩记录的选择信号
  \item SDen:保存最好成绩记录的寄存器的使能信号
  \item DPsel:显示计时成绩记录的选择信号
  \item TMen:码表计时器使能信号
  \item TMreset:码表计时器复位信号
\end{enumerate}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/码表控制器引脚图.png}
		\caption{码表控制器引脚图}
		\label{}
	\end{center}
\end{figure}

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/码表控制器状态图.png}
		\caption{码表控制器状态图}
		\label{}
	\end{center}
\end{figure}

\begin{table}[H]
  \centering
  \caption{码表控制器输出真值表}
    \begin{tabular}{rrrrrrrrr}
      \toprule
    \multicolumn{1}{l}{S2} & \multicolumn{1}{l}{S1} & \multicolumn{1}{l}{S0} &       & \multicolumn{1}{l}{SDSel} & \multicolumn{1}{l}{SDEN} & \multicolumn{1}{l}{DPSEL} & \multicolumn{1}{l}{TMSel} & \multicolumn{1}{l}{TMReset} \\
    \hline
    0     & 0     & 0     &       & 0     & 1     & 1     & 0     & 1 \\
    0     & 0     & 1     &       & 0     & 0     & 1     & 0     & 1 \\
    0     & 1     & 0     &       & 0     & 0     & 1     & 1     & 0 \\
    0     & 1     & 1     &       & 0     & 0     & 1     & 0     & 0 \\
    1     & 0     & 0     &       & 1     & 1     & 1     & 0     & 0 \\
    1     & 0     & 1     &       & 0     & 0     & 0     & 0     & 0 \\
    \bottomrule
    \end{tabular}
  \label{}
\end{table}


\subsubsection{运动码表组合}
把以上的各模块进行组合，实现实验要求中的所有功能并进行测试。

\subsection{实验过程}
本部分给出电路的\textbf{设计过程、逻辑函数、最终的电路图和测试图}。

注：有些模块的逻辑函数过长，且设计过程未用到逻辑函数，故未写。
\subsubsection{数码管驱动}
把上文所列的真值表输入软件，由软件自动生成电路。
由如下的卡诺图可知，Seg1输出存在竞争险象，其他输出均未出现险象。所以我们增加$\overline{X0}X1\overline{X3}$最小项来消除竞争险象。
\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.53]{images/险象.png}
		\caption{险象卡诺图（Seg1）}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/非险象.png}
		\caption{无险象卡诺图（以Seg2为例）}
		\label{}
	\end{minipage}
\end{figure}
最终的逻辑函数表达式如下：
$$
\left\{
  \begin{aligned}
      & Seg_1=X_1\overline{X_2}+X_2\overline{X_1}+X_2\overline{X_0}+X_3+\overline{X0}X1\overline{X3}\\
      & Seg_2=\overline{X_0}\overline{X_1}+X_2\overline{X_1}+X_2\overline{X_0}+X_3\\
      & Seg_3=\overline{X_2}\overline{X_1}+X_1+X_2X_0+X_3\\
      & Seg_4=\overline{X_2}+\overline{X_1}\overline{X_0}+X_1X_0\\
      & Seg_5=\overline{X_2}\overline{X_0}+X_1\overline{X_0}\\
      & Seg_6=\overline{X_2}\overline{X_0}+\overline{X_2}X_1+X_2\overline{X_1}X_0+X_3\\
      & Seg_7=\overline{X_1}+X_0+X_2
  \end{aligned}
\right.
$$

测试时，使用时钟信号控制数码管驱动依次显示0到9。最终的电路图和测试图如下：
\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/数码管驱动电路图.png}
		\caption{数码管驱动电路图}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/数码管驱动测试.png}
		\caption{数码管驱动测试}
		\label{}
	\end{minipage}
\end{figure}

\subsubsection{1位二路选择器}
1位二路选择器是16位二路选择器的1个模块。
把上文所列的真值表输入软件，由软件自动生成电路。由卡诺图可知，输出存在竞争险象，可通过增加$X0X1$最小项来消除险象。

最终的逻辑函数表达式如下：
$$
Out=Sel*X_1+X_0*\overline{Sel}+X0X1
$$

测试时，将$X0$置0，$X1$和$Sel$置1，电路正确输出1。最终的电路图和测试图如下：

\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/1位二路选择器电路图.png}
		\caption{1位二路选择器电路图}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.25]{images/1位二路选择器的测试图.png}
		\caption{1位二路选择器的测试图}
		\label{}
	\end{minipage}
\end{figure}

\subsubsection{16位二路选择器}
将待选择的两个16位二进制数的对应两位二进制数输入到16个1位二路选择器的输入端，再将这16个1位二路选择器
接同一个选择信号，最后把所有二路选择器的输出作为输出，即得到16位二路选择器。

测试时，测试数据是软件自动生成的，最终的电路图和测试图如下：

\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.40]{images/16位二路选择器电路图.png}
		\caption{16位二路选择器电路图}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.25]{images/二路选择器自动测试.png}
		\caption{二路选择器自动测试}
		\label{}
	\end{minipage}
\end{figure}

\subsubsection{2位无符号比较器}
2位无符号比较器是4位无符号比较器的1个模块。
按照上文所列的真值表绘制卡诺图并得出最简逻辑表达式，根据表达式绘制电路。从卡诺图可以看出所有输出均无险象。

最终的逻辑函数表达式如下：
$$
\left\{
  \begin{aligned}
      & Greater=X_1\overline{Y_2}\overline{Y_1}+X_2\overline{Y_2}+X_2X_1\overline{Y_1}\\
      & Equal=\overline{X_2}\overline{X_1}\overline{Y_2}\overline{Y_1}+\overline{X_2}X_1\overline{Y_2}Y_1+X_2\overline{X_1}+Y_2\overline{Y_1}+X_2X_1Y_2Y_1\\
      & Less=\overline{X_2}\overline{X_1}Y_1+\overline{X_2}Y_2+\overline{X_1}Y_2Y_1
  \end{aligned}
\right.
$$

测试时，将$X$置01，$Y$置2，电路正确输出Less。最终的电路图和测试图如下：

\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/2位无符号比较器电路图.png}
		\caption{2位无符号比较器电路图}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.40]{images/2位无符号比较器测试图.png}
		\caption{2位无符号比较器测试图}
		\label{}
	\end{minipage}
\end{figure}

\subsubsection{4位无符号比较器}
4位无符号比较器是16位无符号比较器的1个模块。
首先使用1个2位无符号比较器比较高两位，如果高两位不相等直接输出比较结果即可。如果高两位相等就输出低两位的比较结果。
据此逻辑，可以将高两位比较器的比较结果直接连接到输出端，低两位比较器的比较结果和高两位比较器的Equal输出端相与后
连接至输出端。当然，为避免元件损坏，连接至输出端的两个结果需要做或运算后连接而不能直接连接至输出端。
测试时，将$X$置1001，$Y$置1001，电路正确输出Equal。最终的电路图和测试图如下：

\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/4位无符号比较器电路图.png}
		\caption{4位无符号比较器电路图}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.35]{images/4位无符号比较器测试图.png}
		\caption{4位无符号比较器测试图}
		\label{}
	\end{minipage}
\end{figure}

\subsubsection{16位无符号比较器}
和4位无符号比较器的设计思路基本相同，依次从高到低比较4位即可。
测试时，测试数据是软件自动生成的，最终的电路图和测试图如下：

\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.40]{images/16位无符号比较器电路图.png}
		\caption{16位无符号比较器电路图}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.30]{images/16位无符号比较器自动测试.png}
		\caption{16位无符号比较器自动测试}
		\label{}
	\end{minipage}
\end{figure}

\subsubsection{4位并行加载寄存器}
4位并行加载寄存器是16位并行加载寄存器的1个模块。
并行加载寄存器的设计相对简单，只需把输入连接到4个D触发器的输入端，D触发器的输出端连接输出，再设置好时钟信号和使能端即可。
最终的电路图和测试图如下：

\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/4位并行加载寄存器电路图.png}
		\caption{4位并行加载寄存器电路图}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.35]{images/4位并行加载寄存器测试图.png}
		\caption{4位并行加载寄存器测试图}
		\label{}
	\end{minipage}
\end{figure}

\subsubsection{16位并行加载寄存器}
和4位并行加载寄存器的设计方法相同，只需使用4个4位并行加载寄存器存储1个16位二进制数，再设置好时钟信号和使能端即可。
最终的电路图和测试图如下：

\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/16位并行加载寄存器电路图.png}
		\caption{16位并行加载寄存器电路图}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.35]{images/16位并行加载寄存器测试图.png}
		\caption{16位并行加载寄存器测试图}
		\label{}
	\end{minipage}
\end{figure}

\subsubsection{4位BCD计数器（状态转换）}
4位BCD计数器（状态转换）是4位BCD计数器的1个模块。
把上文所列的真值表输入软件，由软件自动生成电路。由卡诺图可以看出电路中不存在险象。
最终的电路图如下：

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/4位BCD计数器状态转换.png}
		\caption{4位BCD计数器状态转换电路图}
		\label{}
	\end{center}
\end{figure}

\subsubsection{4位BCD计数器（输出函数）}
4位BCD计数器（输出函数）是4位BCD计数器的1个模块。
把上文所列的真值表输入软件，由软件自动生成电路。由卡诺图可以看出电路中不存在险象。
最终的电路图如下：

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/4位BCD计数器输出函数.png}
		\caption{4位BCD计数器输出函数电路图}
		\label{}
	\end{center}
\end{figure}

\subsubsection{4位BCD计数器}
4位BCD计数器是码表计数器的1个模块。
我们在设计好状态转换和输出函数两个组合逻辑电路的基础上来设计4位BCD计数器。我们需要存储4位数，故需要4个D触发器。
只需把D触发器的输出输入到状态转换组合逻辑电路后再输入到触发器的输入端，同时把D触发器的输出输入到输出函数组合逻辑电路
作为输出结果即可。

最终的激励函数是：
$$
\left\{
  \begin{aligned}
    & N_3=S_2S_1S_0+S_3\overline{S_0}\\
    & N_2=\overline{S_2}S_1S_0+S_2\overline{S_1}+S_2\overline{S_0}\\
    & N_1=\overline{S_3}\overline{S_1}S_0+S_1\overline{S_0}\\
    & N_0=\overline{S_0}
  \end{aligned}
\right.
$$
输出函数是：
$$
Cout = S_3S_0
$$

测试时，将$En$置1，$Rst$置1，变换$CLK$，电路实现计数器功能。最终的电路图和测试图如下：

\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/4位BCD计数器电路图.png}
		\caption{4位BCD计数器电路图}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.30]{images/4位BCD计数器测试图.png}
		\caption{4位BCD计数器测试图}
		\label{}
	\end{minipage}
\end{figure}

\subsubsection{码表计数器}
由于码表有4个数字显示器，所以我们需要4个4位BCD计数器来记录时间。当低位的BCD计数器产生进位信号时，高位的BCD计数器
加1，故低位的BCD计数器的进位输出应该连接到高位的BCD计数器时钟信号输入端，而时钟信号连接至最低位的BCD计数器。
注意到这里的D触发器是上升沿触发的，所以需要加非门。

测试时，使用时钟信号控制连接到4个数字显示器的码表计数器，4个数字显示器能正常计时。
最终的电路图和测试图如下。

\begin{figure}[H]
  \begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/码表计数器电路图.png}
		\caption{码表计数器电路图}
		\label{}
	\end{minipage}
	\begin{minipage}[t]{0.5\linewidth}
		\centering
		\includegraphics[scale=0.50]{images/码表计数器自动测试.png}
		\caption{码表计数器自动测试}
		\label{}
	\end{minipage}
\end{figure}

\subsubsection{码表显示驱动}
在设计码表显示驱动我们把输入的16位二进制信号依次输入到4个数码管显示驱动的输入端，再将4个数码管显示驱动输出信号
输出到输出端即可。注意到输出信号只有28位而输出端有32位，所以我们把不需要的输出端接地即可。
最终的电路图如下：

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/码表显示驱动电路图.png}
		\caption{码表显示驱动电路图}
		\label{}
	\end{center}
\end{figure}

\subsubsection{码表控制器状态转换}
根据状态图确定每一个现态的次态，列出真值表，再把真值表输入软件，由软件自动生成电路。
最终的电路图如下：

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.50]{images/码表控制器状态转换.png}
		\caption{码表控制器状态转换电路图}
		\label{}
	\end{center}
\end{figure}

\subsubsection{码表控制器输出函数}
把上文所列的真值表输入软件，由软件自动生成电路。
最终的电路图如下：

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.40]{images/码表控制器输出函数.png}
		\caption{码表控制器输出函数电路图}
		\label{}
	\end{center}
\end{figure}

\subsubsection{码表控制器}
我们在设计好状态转换和输出函数两个组合逻辑电路的基础上来设计码表控制器。
我们只需把D触发器的输出输入到状态转换组合逻辑电路后再输入到触发器的输入端，同时把D触发器的输出输入到输出函数组合逻辑电路
作为输出结果即可。

最终的激励函数是：
$$
\left\{
  \begin{aligned}
    & N_2=\overline{start}*\overline{reset}*S_2+\overline{reset}*S_2\overline{S_0}+store*\overline{reset}S_1S_0\\
    & N_1=\overline{start}*\overline{store}*\overline{reset}S_1+\overline{reset}S_1\overline{S_0}+start*\overline{reset}*\overline{S_2}\overline{S_1}S_0\\
    & N_0=\overline{start}*\overline{reset}\overline{S_1}+\overline{reset}*\overline{S_1}\overline{S_0}+\overline{store}*\overline{reset}*S_1S_0\\
          & +\overline{reset}*\overline{NewRecord}*S_1S_0+\overline{reset}*S_2+stop*\overline{reset}*\overline{S_0}
  \end{aligned}
\right.
$$
输出函数是：
$$
\left\{
  \begin{aligned}
    & SDSel=S_2\overline{S_0}\\
    & SDEN=\overline{S_1}\overline{S_0}\\
    & DPSEL=\overline{S_2}+\overline{S_0}\\
    & TMSel=S_1\overline{S_0}\\
    & TMReset=\overline{S_2}\overline{S_1}
  \end{aligned}
\right.
$$

\subsubsection{运动码表组合}
根据要实现的功能连接各模块并进行测试，最终结果如下图所示。

\begin{figure}[H]
	\begin{center}
		\includegraphics[scale=0.55]{images/运动码表测试.png}
		\caption{运动码表}
		\label{}
	\end{center}
\end{figure}

\newpage

\section{设计总结与心得}


\subsection{实验总结}
在本次实验中，我完成了一个运动码表系统的设计。我设计了16位并行加载寄存器、码表计数器、码表控制器、码表显示驱动等模块的电路，
并实现了Start,Stop,Store,Reset等功能。通过本次实验，我基本了解并掌握了小型数字电路系统的设计、仿真、调试方法以及电路模块封装的方法。
同时，由于高端芯片制造是我国的“卡脖子技术”之一，学好数字电路有利于大学生为解决“卡脖子技术”问题做贡献。


\subsubsection{遇到的问题及处理}
遇到的问题：
\begin{enumerate}
  \item 根据真值表自动生成的组合逻辑电路过于复杂
  \item 根据真值表自动生成的组合逻辑电路存在险象
  \item 电路图出现过多交叉，影响可读性
\end{enumerate}
解决方法：
\begin{enumerate}
  \item 自己根据卡诺图进行组合逻辑电路的设计，通过增加异或门、同或门等减小电路使用的逻辑门数量
  \item 在自动生成的基础上增加逻辑门来消除险象
  \item 增加相应的封装，或重新布线来提高电路的可读性
\end{enumerate}

\subsubsection{设计方案存在的不足}
\begin{enumerate}
  \item 组合逻辑电路基于自动生成，有些电路较为复杂
  \item 布线时存在较多的交叉
\end{enumerate}

\subsection{实验心得}
\begin{enumerate}
  \item 在设计较为复杂的电路时，可先把电路分成若干模块分别设计，在结合在一起。
  \item 可以充分利用软件进行仿真，以验证电路设计的正确性
  \item 设计电路时，应先了解要实现的功能，再进行真值表和状态图的设计
\end{enumerate}

\subsection{意见与建议}
\begin{enumerate}
  \item 可以增加一些各模块的详细功能说明
  \item 可以增加一些讲解Logisim软件的课时
\end{enumerate}

\newpage

\section{原创性声明}
本人郑重声明本报告内容，是由作者本人独立完成的。
有关观点、方法、数据和文献等的引用已在文中指出。
除文中已注明引用的内容外，本报告不包含任何其他个人或集体已经公开发表的作品成果，不存在剽窃、抄袭行为。

已阅读并同意以下内容。

判定为不合格的一些情形：
\begin{enumerate}
	\setlength{\itemindent}{2em}
	\item 请人代做或冒名顶替者；
	\item 替人做且不听劝告者；
	\item 实验报告内容抄袭或雷同者；
	\item 实验报告内容与实际实验内容不一致者；
	\item 实验电路抄袭者。
\end{enumerate}
作者签名：

\end{document}